/*******************************************************************************
  * 文件：KeyCheck.h
  * 作者：zyz
  * 版本：v1.0.0
  * 日期：2017-08-03
  * 说明：按键检测
*******************************************************************************/
#ifndef __KEY_CHECK_H
#define __KEY_CHECK_H

/* 头文件 *********************************************************************/
#include "Typedefine.h"
#include "Constant.h"

/* 宏定义 *********************************************************************/
#define u16KEY_CHECK_TIME_MSEC    ((U16)  10)    // 按键检测时间（微秒）
#define u16KEY_PRESS_TIME_MIN     ((U16)   5)    // 最小短按时间
#define u16KEY_PRESS_TIME_MAX     ((U16) 120)    // 最大短按时间
#define u16KEY_CONTINUE_TIME      ((U16) 150)    // 连按启动时间
#define u16KEY_CONTINUE_STEP      ((U16)  20)    // 连按步长时间
#define u16KEY_HOLD_1500MS_TIME   ((U16) 150)    // 长按1.5s时间
#define u16KEY_HOLD_2S_TIME       ((U16) 200)    // 长按2s时间
#define u16KEY_HOLD_3S_TIME       ((U16) 300)    // 长按3s时间
#define u16KEY_HOLD_5S_TIME       ((U16) 500)    // 长按5s时间
#define u16KEY_HOLD_10S_TIME      ((U16)1000)    // 长按10S时间

/* 类型定义 *******************************************************************/
// 操作类型
typedef enum
{
	eKEY_TYPE_PRESS_DOWN,  // 按下
	eKEY_TYPE_PRESS_UP,    // 抬起
	eKEY_TYPE_CONTINUE,    // 连按
    eKEY_TYPE_HOLD_2S,     // 长按2s
	eKEY_TYPE_HOLD_3S,     // 长按3s
	eKEY_TYPE_HOLD_5S,     // 长按5s
	eKEY_TYPE_HOLD_10S,    // 长按10S
} KeyType_te;

// 按键检测
typedef struct
{
	U32 u32CurrentKeyValue;    // 当前按键值
	U32 u32LastKeyValue;       // 上次按键值
	U16 u16TimeCount;          // 时间计时
	Bool bValidOperation;      // 有效操作
} KeyCheck_ts;

/* 变量声明 *******************************************************************/
/* 函数声明 *******************************************************************/
void Key_Init(void);     // 初始化按键
void Key_Check(void);    // 按键检测

#endif  /*** #ifndef __KEY_CHECK_H ***/

/***************************** 文件结束 ***************************************/

